% Ejercicio "Series de Fibonacci"
\subsection*{\fbox{\theejercicio} - Series de Fibonacci}

Un lenguaje de programaci\'on acepta la definici\'on de series finitas de n\'umeros naturales, por ejemplo:

\begin{center}
\begin{tabular}{|c|} \hline
\verb@{1,2,3,4,6}@ \\
\verb@{10,12,14}@  \\ \hline
\end{tabular}
\end{center}

Todas las series deben tener al menos un elemento.

\smallskip

Una serie de n\'umeros naturales $\{x_0,x_1,x_2,...,x_n\}$ se dice que es una serie de Fibonacci si y s\'olo si:

$$\forall i \geq 2\ \ x_1=x_{i-1} + x_{i-2}$$

\smallskip

Cualquier serie con menos de tres elementos se considera que es de Fibonacci. Por ejemplo, se consideran series de Fibonacci las siguientes:

\begin{center}
\begin{tabular}{|c|} \hline
\verb@{3}@                     \\
\verb@{10,12,22}@              \\
\verb@{3,9,12,21}@             \\
\verb@{1,1,2,3,5,8,13,21,34}@  \\ \hline
\end{tabular}
\end{center}

\begin{enumerate}[1)]
\item Definir una gram\'atica S-atribuida o L-atribuida que NO sea recursiva por la izquierda que compruebe mediante un atributo de tipo booleano asociado a su axioma si una serie dada es o no una serie de Fibonacci.
\item Dibujar el \'arbol de dependencias directas para la gram\'atica atribuida del apartado 7 de la sentencia del lenguaje: \verb@{3,9,12}@.
\end{enumerate}

% Solución del ejercicio
\subsubsection*{SOLUCI\'ON}

Apartado 1)

\begin{center}
\begin{tabular}{|lcl|} \hline
             &               &                                                                             \\
{\em Axioma} & $\rightarrow$ & {\em Serie} {\bf \$}                                                        \\
             &               & \ \ \ \{ $Axioma.f = Serie.f;$ \}                                           \\
{\em Serie}  & $\rightarrow$ & {\bf \{} {\em Lista} {\bf \}}                                               \\
             &               & \ \ \ \{ $Serie.f = Lista.f;$ \}                                            \\
             & $|$           & {\bf \{ NUM \}}                                                             \\
             &               & \ \ \ \{ $Serie.f = true;$ \}                                               \\
{\em Lista}  & $\rightarrow$ & {\bf NUM , }{\em Lista$_1$}                                                 \\
             &               & \ \ \ \{                                                                    \\
             &               & \ \ \ \ \ \ $Lista.f = Lista_1.f AND (NUM.v + Lista_1.seg == Lista_1.ter);$ \\
             &               & \ \ \ \ \ \ $Lista.seg = NUM.v;$                                            \\
             &               & \ \ \ \ \ \ $Lista.ter = Lista_1.seg;$                                      \\
             &               & \ \ \ \}                                                                    \\
             & $|$           & {\bf NUM$_1$, NUM$_2$}                                                      \\
             &               & \ \ \ \ \ \ $Lista.f = true;$                                               \\
             &               & \ \ \ \ \ \ $Lista.seg = NUM_1.v;$                                          \\
             &               & \ \ \ \ \ \ $Lista.ter = NUM_2.v;$                                          \\
             &               & \ \ \ \}                                                                    \\
             &               &                                                                             \\ \hline
\end{tabular}
\end{center}

Puede usarse tambi\'en una gram\'atica S-atribuida, aunque las reglas son diferentes porque ahora se recorre la lista hacia atr\'as.

\medskip

Apartado 2)
